package xyz.chaobei.feature.utils;

import xyz.chaobei.feature.entity.Person;

import java.util.Optional;

/**
 * @author <a href='mailto:maruichao52@gmail.com'>MRC</a>
 * @since 2021/2/4
 */
public class OptionalTest {

    /**
     * <p>
     * <p>author: <a href='mailto:maruichao52@gmail.com'>MRC</a>
     *
     * @param args 参数
     * @return void
     * @since 2021/2/4
     **/
    public static void main(String[] args) {

        Optional<String> optional = Optional.of("abc");
        System.out.println("isPresent=" + optional.isPresent());

        System.out.println("get=" + optional.get());
        System.out.println("orElse=" + optional.orElse("other"));

        // 如果optional 值不为空，则调用后面的处理，否则不作处理
        optional.ifPresent((str) -> System.out.println(str));

        System.out.println("----------------------------------------");

        Person person = new Person("test", 1);
        // 不为空，则打印name
        Optional.ofNullable(person).ifPresent((p) -> System.out.println(p.getName()));
        // 不执行任何操作
        Optional.ofNullable(null).ifPresent((p) -> System.out.println(p));

        // map 链式操作,前一个map的操作返回值作为后一个map的参数
        Optional.ofNullable(person).map(p -> p.getName()).map(name -> name.startsWith("t")).map((b) -> {
            System.out.println(b);
            return b;
        }).orElseThrow(() -> new RuntimeException("error"));

        // Optional 适用于层级取值的业务
    }
}
